package com.cy.pj.common.aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

/**
 * @Author YuBaoFu
 * @create 2025/06/09
 * @descr
 * iption
 */
@Order(2)
@Aspect
@Component
public class doAroundAspect {

    /*切入点定义 pointCut*/
    /*bean表达式 代表当前切入点选择某个Bean，粗粒度 不能具体到方法 *ServiceImpl
    代表选择所有以ServiceIpl结尾的bean*/
    @Pointcut("bean(*ServiceImpl)")
    public void doLog(){};

    /* 通知类型：Around 环绕通知 进入目标方法之前执行一次 结束目标方法之后继续执行 */
    @Around("doLog()")
    public Object doAroundLog(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.currentTimeMillis();
        Object result = joinPoint.proceed();
        long end = System.currentTimeMillis();
        System.out.println("当前执行时间为:" + (end-start));
        return result;
    }

}
